package com.cdn.nodes.mapper;

import com.cdn.nodes.domain.EdgeNodes;
import com.cdn.nodes.domain.dto.EdgeNodeSshDTO;
import com.cdn.nodes.domain.qo.EdgeNodesQO;
import com.cdn.nodes.domain.vo.EdgeNodeSshAndPortVO;
import com.cdn.nodes.domain.vo.EdgeNodesVO;

import java.util.List;

/**
 * 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等Mapper接口
 * 
 * @author Cinzia
 * @date 2024-12-20
 */
public interface EdgeNodesMapper 
{
    /**
     * 查询边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * 
     * @param id 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等主键
     * @return 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     */
    public EdgeNodes selectEdgeNodesById(Long id);

    /**
     * 查询边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等列表
     * 
     * @param edgeNodesQO 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * @return 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等集合
     */
    public List<EdgeNodesVO> selectEdgeNodesList(EdgeNodesQO edgeNodesQO);

    /**
     * 新增边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * 
     * @param edgeNodes 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * @return 结果
     */
    public int insertEdgeNodes(EdgeNodes edgeNodes);

    /**
     * 修改边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * 
     * @param edgeNodes 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * @return 结果
     */
    public int updateEdgeNodes(EdgeNodes edgeNodes);

    /**
     * 删除边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * 
     * @param id 边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等主键
     * @return 结果
     */
    public int deleteEdgeNodesById(Long id);

    /**
     * 批量删除边缘节点，用于记录每个CDN边缘节点的详细信息，包括名称、IP地址、区域、集群、SSH信息等
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEdgeNodesByIds(Long[] ids);

    /**
     * 根据节点Id获取DNS线路
     * @param nodeId
     */
    public String selectDnsLineByNodeId(Long nodeId);

    public int enableNodeStatusByNodeId(Long nodeId);

    public int DeactivatedNodeStatusByNodeId(Long nodeId);

    public EdgeNodeSshAndPortVO getNodeSshAndPort(Long nodeId);

    public EdgeNodeSshDTO getNodeSsh(Long nodeId);

    public List<String> getNodeLine(Long[] nodeId);

}
